<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

include_once('ExceptionDAO.php');
include_once 'util/MapError.php';
include_once 'TOAdmin.php';
include_once 'TOAcao.php';

/**
 * DAO para operações de banco para Administrador
 * @author Douglas Rafael
 *
 */
class DAOAdmin extends CI_Model {

    /**
     * Autenticar usuário administrador
     * @param string $usuario
     * @param string $senha
     * @throws ExceptionDAO 
     */
    public function autenticar($usuario, $senha) {
        try {
            $this->db->select('id, nome, sobrenome');
            $this->db->where('senha', md5($senha));
            $this->db->where('login', $usuario);
            $this->db->or_where('email', $usuario);
            $this->db->where('status', 1);
            $result = $this->db->get('usuario_admin', 1);

            if ($result->result()) {
                foreach($result->result() as $value){
                    $usuAdmin = new TOAdmin();
                    $usuAdmin->codigo = $value->id;
                    $usuAdmin->nome = $value->nome;
                }
                return $usuAdmin;
            } else {
                throw new ExceptionDAO('Não foi possível realizar o login. Usuário ou senha incorretos.');
            }
        } catch (ExceptionDAO $ed) {
            throw $ed;
        } catch (Exception $e) {
            $this->gerarExcecao($e, "Erro inesperado ao tentar efetuar o login.");
        }
    }

    public function getAdmin($id) {
        try {
            $this->db->where('id', $id);
            $result = $this->db->get('usuario_admin');

            if ($value = $result->row()) {
                $userAdmin = new TOAdmin();
                $userAdmin->codigo = $value->id;
                $userAdmin->nome = $value->nome;
                $userAdmin->sobrenome = $value->sobrenome;
                $userAdmin->email = $value->email;
                $userAdmin->login = $value->login;
                $userAdmin->senha = $value->senha;
                $userAdmin->imagem = $value->imagem;
                $userAdmin->status = $value->status;
                $userAdmin->super_admin = $value->super_admin;
                $userAdmin->quantidade_login = $value->quantidade_login;
                $userAdmin->ultimo_login = $value->ultimo_login;
                $userAdmin->data_cadastro = $value->data_cadastro;
                
                return $userAdmin;
            }
        } catch (Exception $erro) {
            
        }
    }
    
    
    	/**
     * Verifica se um usuário tem permissão de executar uma ação.
     * @param $idUsuario
     * @param $idAcao
     * @return bool
     */
    public function temPermissao($idUsuario, $idAcao) {
        try {
            $this->db->select('COUNT(*) as total');
            $this->db->from('usuario_admin_has_grupo ug');
            $this->db->join('grupo g', 'g.id = ug.grupo_id');
            $this->db->join('grupo_has_acao ga', 'ga.grupo_id = g.id');
            $this->db->where('ug.usuario_id', $idUsuario);
            $this->db->where('g.status', 1);
            $where = '(ga.acao_id = ' . $idAcao . ' OR ga.acao_id = ' . TOAcao::TODAS_ACOES . ')';
            $this->db->where($where);
           
            $result = $this->db->get();
            
           // echo $this->db->last_query() . '<br>';
            
            foreach ($result->result() as $value) {
                if ($value->total == 1)
                    return TRUE;
                else
                    return FALSE;
            }
        } catch (Exception $e) {
            return FALSE;
        }
    }

}